/**
 * Copyright (c) 2016-2019 人人开源 All rights reserved.
 * <p>
 * https://www.renren.io
 * <p>
 * 版权所有，侵权必究！
 */

package com.lft.common.utils;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lft.common.xss.SQLFilter;
import org.apache.commons.lang.StringUtils;

import java.util.Map;

/**
 * 查询参数
 * @author Mark sunlightcs@gmail.com
 */
public class Query<T> {
	
	public IPage<T> getPage(Map<String, Object> params) {
		return this.getPage(params, null, false);
	}
	
	public IPage<T> getPage(Map<String, Object> params, String defaultOrderField, boolean isAsc) {
		//分页参数
		long curPage = 1;
		long limit = 10;
		
		if (params.get(com.lft.common.utils.Constant.PAGE) != null) {
			curPage = Long.parseLong((String) params.get(com.lft.common.utils.Constant.PAGE));
		}
		if (params.get(com.lft.common.utils.Constant.LIMIT) != null) {
			limit = Long.parseLong((String) params.get(com.lft.common.utils.Constant.LIMIT));
		}
		
		//分页对象
		Page<T> page = new Page<>(curPage, limit);
		
		//分页参数
		params.put(com.lft.common.utils.Constant.PAGE, page);
		
		//排序字段
		//防止SQL注入（因为sidx、order是通过拼接SQL实现排序的，会有SQL注入风险）
		String orderField = SQLFilter.sqlInject((String) params.get(com.lft.common.utils.Constant.ORDER_FIELD));
		String order = (String) params.get(com.lft.common.utils.Constant.ORDER);
		
		//前端字段排序
		if (StringUtils.isNotEmpty(orderField) && StringUtils.isNotEmpty(order)) {
			if (com.lft.common.utils.Constant.ASC.equalsIgnoreCase(order)) {
				return page.addOrder(OrderItem.asc(orderField));
			} else {
				return page.addOrder(OrderItem.desc(orderField));
			}
		}
		
		//没有排序字段，则不排序
		if (StringUtils.isBlank(defaultOrderField)) {
			return page;
		}
		
		//默认排序
		if (isAsc) {
			page.addOrder(OrderItem.asc(defaultOrderField));
		} else {
			page.addOrder(OrderItem.desc(defaultOrderField));
		}
		
		return page;
	}
}
